﻿/**
 * \brief TCP连接线程
 * \file CTcpThread.cc
 */

#include <pthread.h>

#include "CTcpThread.h"
#include "CTcpTaskPool.h"
#include "CTcpTask.h"
#include "Log.h"

CTcpThread::CTcpThread(CTcpTaskPool* _pool, int _eventSize)
{
	this->_M_pool = _pool;
	this->_M_epfd = ::epoll_create(_eventSize);

	if(this->_M_epfd == -1)
	{
		log::_ERROR_LOG("[TCP连接线程]epoll_create创建错误，%s", __PRETTY_FUNCTION__);
	}
}

CTcpThread::~CTcpThread()
{}

/**
 * \brief 加入到任务等待队列
 * \param _pTask：任务对象
 */
void CTcpThread::push(CTcpTask* _pTask)
{
	if(!_pTask)
	{
		this->_M_mutex.lock();
		this->_M_queue.push_back(_pTask);
		this->_M_mutex.unlock();
	}
}

/**
 * \brief 转移到任务列表
 */
void CTcpThread::shift()
{
	this->_M_mutex.lock();
	while(!this->_M_queue.empty())
	{
		CTcpTask* pTask = this->_M_queue.front();
		this->_M_queue.pop_front();

		/// 加入任务列表必须用这个接口
		this->add(pTask);
	}
	this->_M_mutex.unlock();
}

/**
 * \brief 从任务列表删除
 * \param _pTask：任务对象
 */
void CTcpThread::remove(CTcpTask* _pTask)
{
	_task_list_iter iter = this->_M_list.find(_pTask);
	/// 从任务列表删除必须使用这个接口
	this->remove(iter);
}


